{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\".\\\\diyLogo.png\" alt=\"some_text\">\n",
    "<h1> 第二讲 程序设计基础</h1>\n",
    "<a id=backup></a>\n",
    "<H2>目录</H2>  \n",
    "\n",
    "[2.1 程序执行过程](#Section1)  \n",
    "[2.2 程序实例](#Section2)  \n",
    "[2.3 程序的基本结构](#Section3)     \n",
    "[2.4 顺序结构](#Section4)  \n",
    "[2.5 分支结构](#Section5)  \n",
    "[2.6 循环结构](#Section6) "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section1> </a>\n",
    "## 2.1 程序执行过程\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x18f20e5e760>,\n",
       " <matplotlib.lines.Line2D at 0x18f20e5e790>]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "x = np.linspace(0,6*np.pi)\n",
    "plt.plot(x,np.sin(x),x,np.cos(x))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 程序设计语言：机器语言、汇编语言、高级语言\n",
    "## 编译和解释\n",
    "编译：fortran C C++ C#\n",
    "解释：basic JavaScript PHP \n",
    "Python？？？\n",
    "Python语言执行的几种方式：\n",
    "\n",
    "分析程序执行过程-IPO：  \n",
    "a. Input模块：  \n",
    "b. Process模块：  \n",
    "c. Output模块：  \n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id = Section2> </a>\n",
    "## 2.2 程序实例\n",
    "\n",
    "<p><a href=\"https://yanghailin.blog.csdn.net/article/details/81126087?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-5.no_search_link\">\n",
    "this is example of python</a></p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "24\n",
      "['123', '124', '132', '134', '142', '143', '213', '214', '231', '234', '241', '243', '312', '314', '321', '324', '341', '342', '412', '413', '421', '423', '431', '432']\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "Created on Thu Jul 19 19:51:08 2018\n",
    "有四个数字：1、2、3、4，能组成多少个互不相同且无重复数字的三位数？各是多少？\n",
    "@author: yhl\n",
    "\"\"\"\n",
    " \n",
    "L=[]\n",
    "a=[1,2,3,4]\n",
    " \n",
    "#for i in range(len(a)):\n",
    " \n",
    "for val_1 in a:   #   for(i=1;i<n;I++)\n",
    "    for val_2 in a:\n",
    "        for val_3 in a:\n",
    "            if(val_1 == val_2 or val_1 == val_3 or val_2 == val_3):\n",
    "                continue;\n",
    "            else:\n",
    "                L.append(str(val_1)+str(val_2)+str(val_3))\n",
    " \n",
    " \n",
    "print(len(L)) \n",
    "print (L)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1 2 3 n= 1\n",
      "1 2 4 n= 2\n",
      "1 3 2 n= 3\n",
      "1 3 4 n= 4\n",
      "1 4 2 n= 5\n",
      "1 4 3 n= 6\n",
      "2 1 3 n= 7\n",
      "2 1 4 n= 8\n",
      "2 3 1 n= 9\n",
      "2 3 4 n= 10\n",
      "2 4 1 n= 11\n",
      "2 4 3 n= 12\n",
      "3 1 2 n= 13\n",
      "3 1 4 n= 14\n",
      "3 2 1 n= 15\n",
      "3 2 4 n= 16\n",
      "3 4 1 n= 17\n",
      "3 4 2 n= 18\n",
      "4 1 2 n= 19\n",
      "4 1 3 n= 20\n",
      "4 2 1 n= 21\n",
      "4 2 3 n= 22\n",
      "4 3 1 n= 23\n",
      "4 3 2 n= 24\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "for i in range(1,5):\n",
    "    for j in range(1,5):\n",
    "        for k in range(1,5):\n",
    "            if( i != k ) and (i != j) and (j != k):\n",
    "                n=n+1\n",
    "                print (i,j,k,\"n=\",n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "profit= 0.1\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "企业发放的奖金根据利润提成。\n",
    "利润(I)低于或等于10万元时，奖金可提10%；\n",
    "利润高于10万元，低于20万元时，低于10万元的部分\n",
    "按10%提成，高于10万元的部分，可提成7.5%；\n",
    "20万到40万之间时，高于20万元的部分，可提成5%；\n",
    "40万到60万之间时高于40万元的部分，可提成3%；\n",
    "60万到100万之间时，高于60万元的部分，可提成1.5%;\n",
    "高于100万元时,超过100万元的部分按1%提成。\n",
    "从键盘输入当月利润I，求应发放奖金总数？\n",
    "'''\n",
    " \n",
    "profit = 0\n",
    "I = int(input(\"please input: \"))\n",
    "if(I<=10):\n",
    "    profit = 0.1 * I\n",
    "elif(I <= 20):\n",
    "    profit = 10 *0.1 + (I - 10)*0.075\n",
    "elif(I <=40):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (I - 20)*0.05\n",
    "elif(I <= 60):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (I - 40)*0.03\n",
    "elif(I <= 100):\n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (I - 60)*0.015\n",
    "else : \n",
    "    profit = 10 * 0.1 + (20 - 10)*0.075 + (40 - 20)*0.05 + (60 - 40)*0.03 + (100 - 60)*0.015 + (I -100)*0.01\n",
    "    \n",
    "print (\"profit=\",profit)\n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.2\n",
      "profit= 0.2\n"
     ]
    }
   ],
   "source": [
    "i = int(input('净利润:'))\n",
    "arr = [1000000,600000,400000,200000,100000,0]\n",
    "rat = [0.01,0.015,0.03,0.05,0.075,0.1]\n",
    "r = 0\n",
    "for idx in range(0,6):\n",
    "    if i>arr[idx]:\n",
    "        r+=(i-arr[idx])*rat[idx]#r=r+nnn\n",
    "        print((i-arr[idx])*rat[idx])\n",
    "        i=arr[idx]\n",
    "print (\"profit=\",r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 数字类型转换\n",
    "有时候，我们需要对数据内置的类型进行转换，数据类型的转换，你只需要将数据类型作为函数名即可。\n",
    "\n",
    "int(x) 将x转换为一个整数。\n",
    "\n",
    "float(x) 将x转换到一个浮点数。\n",
    "\n",
    "complex(x) 将x转换到一个复数，实数部分为 x，虚数部分为 0。\n",
    "\n",
    "complex(x, y) 将 x 和 y 转换到一个复数，实数部分为 x，虚数部分为 y。x 和 y 是数字表达式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section3></a>\n",
    "## 2.3程序的基本结构\n",
    "结构化程序的三大基本结构：\n",
    "\n",
    "a.顺序结构  \n",
    "b.分支结构  \n",
    "c.循环结构  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=Section4></a>\n",
    "## 2.4顺序结构\n",
    "\n",
    "### 数学函数\n",
    "<table><tr>\n",
    "<th>函数</th><th>返回值 ( 描述 )</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-abs.html\" rel=\"noopener noreferrer\">abs(x)</a></td><td>返回数字的绝对值，如abs(-10) 返回 10</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-ceil.html\" rel=\"noopener noreferrer\">ceil(x) </a></td><td>返回数字的上入整数，如math.ceil(4.1) 返回 5</td></tr>\n",
    "<tr><td><p>cmp(x, y)</p></td>\n",
    "<td>如果 x &lt; y 返回 -1, 如果 x == y 返回 0, 如果 x &gt; y 返回 1。 <strong style=\"color:red\">Python 3 已废弃，使用 (x&gt;y)-(x&lt;y) 替换</strong>。 </td>\n",
    "</tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-exp.html\" rel=\"noopener noreferrer\">exp(x) </a></td><td>返回e的x次幂(e<sup>x</sup>),如math.exp(1) 返回2.718281828459045</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-fabs.html\" rel=\"noopener noreferrer\">fabs(x)</a></td><td>返回数字的绝对值，如math.fabs(-10) 返回10.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-floor.html\" rel=\"noopener noreferrer\">floor(x) </a></td><td>返回数字的下舍整数，如math.floor(4.9)返回 4</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log.html\" rel=\"noopener noreferrer\">log(x) </a></td><td>如math.log(math.e)返回1.0,math.log(100,10)返回2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-log10.html\" rel=\"noopener noreferrer\">log10(x) </a></td><td>返回以10为基数的x的对数，如math.log10(100)返回 2.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-max.html\" rel=\"noopener noreferrer\">max(x1, x2,...) </a></td><td>返回给定参数的最大值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-min.html\" rel=\"noopener noreferrer\">min(x1, x2,...) </a></td><td>返回给定参数的最小值，参数可以为序列。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-modf.html\" rel=\"noopener noreferrer\">modf(x) </a></td><td>返回x的整数部分与小数部分，两部分的数值符号与x相同，整数部分以浮点型表示。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-pow.html\" rel=\"noopener noreferrer\">pow(x, y)</a></td><td> x**y 运算后的值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-round.html\" rel=\"noopener noreferrer\">round(x [,n])</a></td><td><p>返回浮点数 x 的四舍五入值，如给出 n 值，则代表舍入到小数点后的位数。</p>\n",
    "<p><strong>其实准确的说是保留值将保留到离上一位更近的一端。</strong></p>\n",
    "</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sqrt.html\" rel=\"noopener noreferrer\">sqrt(x) </a></td><td>返回数字x的平方根。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 随机数函数\n",
    "随机数可以用于数学，游戏，安全等领域中，还经常被嵌入到算法中，用以提高算法效率，并提高程序的安全性。\n",
    "\n",
    "Python包含以下常用随机数函数：\n",
    "\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-choice.html\" rel=\"noopener noreferrer\">choice(seq)</a></td><td>从序列的元素中随机挑选一个元素，比如random.choice(range(10))，从0到9中随机挑选一个整数。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-randrange.html\" rel=\"noopener noreferrer\">randrange ([start,] stop [,step]) </a></td><td>从指定范围内，按指定基数递增的集合中获取一个随机数，基数默认值为 1</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-random.html\" rel=\"noopener noreferrer\">random() </a></td><td> 随机生成下一个实数，它在[0,1)范围内。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-seed.html\" rel=\"noopener noreferrer\">seed([x]) </a></td><td>改变随机数生成器的种子seed。如果你不了解其原理，你不必特别去设定seed，Python会帮你选择seed。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-shuffle.html\" rel=\"noopener noreferrer\">shuffle(lst) </a></td><td>将序列的所有元素随机排序</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-uniform.html\" rel=\"noopener noreferrer\">uniform(x, y)</a></td><td>随机生成下一个实数，它在[x,y]范围内。</td></tr>\n",
    "</table>\n",
    "\n",
    "### 三角函数\n",
    "Python包括以下三角函数：\n",
    "<table><tr>\n",
    "<th>函数</th><th>描述</th></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-acos.html\" rel=\"noopener noreferrer\">acos(x)</a></td><td>返回x的反余弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-asin.html\" rel=\"noopener noreferrer\">asin(x)</a></td><td>返回x的反正弦弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan.html\" rel=\"noopener noreferrer\">atan(x)</a></td><td>返回x的反正切弧度值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-atan2.html\" rel=\"noopener noreferrer\">atan2(y, x)</a></td><td>返回给定的 X 及 Y 坐标值的反正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-cos.html\" rel=\"noopener noreferrer\">cos(x)</a></td><td>返回x的弧度的余弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-hypot.html\" rel=\"noopener noreferrer\">hypot(x, y)</a></td><td>返回欧几里德范数 sqrt(x*x + y*y)。 </td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-sin.html\" rel=\"noopener noreferrer\">sin(x)</a></td><td>返回的x弧度的正弦值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-tan.html\" rel=\"noopener noreferrer\">tan(x)</a></td><td>返回x弧度的正切值。</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-degrees.html\" rel=\"noopener noreferrer\">degrees(x)</a></td><td>将弧度转换为角度,如degrees(math.pi/2) ，  返回90.0</td></tr>\n",
    "<tr><td><a target=\"_blank\" href=\"/python3/python3-func-number-radians.html\" rel=\"noopener noreferrer\">radians(x)</a></td><td>将角度转换为弧度</td></tr>\n",
    "</table>\n",
    "\n",
    "### 数学常量\n",
    "\n",
    "<table><tr>\n",
    "<th>常量</th><th>描述</th></tr>\n",
    "<tr><td>pi</td><td>数学常量 pi（圆周率，一般以π来表示）</td></tr>\n",
    "<tr><td>e</td><td>数学常量 e，e即自然常数（自然常数）。</td></tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "ename": "ExecutableNotFound",
     "evalue": "failed to execute WindowsPath('dot'), make sure the Graphviz executables are on your systems' PATH",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\backend\\execute.py\u001b[0m in \u001b[0;36mrun_check\u001b[1;34m(cmd, input_lines, encoding, quiet, **kwargs)\u001b[0m\n\u001b[0;32m     78\u001b[0m                 \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'stdout'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'stderr'\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msubprocess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPIPE\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 79\u001b[1;33m             \u001b[0mproc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0m_run_input_lines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_lines\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     80\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\backend\\execute.py\u001b[0m in \u001b[0;36m_run_input_lines\u001b[1;34m(cmd, input_lines, kwargs)\u001b[0m\n\u001b[0;32m     98\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m_run_input_lines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_lines\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 99\u001b[1;33m     \u001b[0mpopen\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msubprocess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mstdin\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0msubprocess\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mPIPE\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    100\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\subprocess.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)\u001b[0m\n\u001b[0;32m    853\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 854\u001b[1;33m             self._execute_child(args, executable, preexec_fn, close_fds,\n\u001b[0m\u001b[0;32m    855\u001b[0m                                 \u001b[0mpass_fds\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcwd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0menv\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\subprocess.py\u001b[0m in \u001b[0;36m_execute_child\u001b[1;34m(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, unused_restore_signals, unused_start_new_session)\u001b[0m\n\u001b[0;32m   1306\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1307\u001b[1;33m                 hp, ht, pid, tid = _winapi.CreateProcess(executable, args,\n\u001b[0m\u001b[0;32m   1308\u001b[0m                                          \u001b[1;31m# no special security\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mFileNotFoundError\u001b[0m: [WinError 2] 系统找不到指定的文件。",
      "\nThe above exception was the direct cause of the following exception:\n",
      "\u001b[1;31mExecutableNotFound\u001b[0m                        Traceback (most recent call last)",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\IPython\\core\\formatters.py\u001b[0m in \u001b[0;36m__call__\u001b[1;34m(self, obj, include, exclude)\u001b[0m\n\u001b[0;32m    968\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    969\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mmethod\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 970\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mmethod\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mexclude\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mexclude\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    971\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    972\u001b[0m         \u001b[1;32melse\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\jupyter_integration.py\u001b[0m in \u001b[0;36m_repr_mimebundle_\u001b[1;34m(self, include, exclude, **_)\u001b[0m\n\u001b[0;32m     96\u001b[0m         \u001b[0minclude\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0minclude\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;33m{\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_jupyter_mimetype\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     97\u001b[0m         \u001b[0minclude\u001b[0m \u001b[1;33m-=\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexclude\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 98\u001b[1;33m         return {mimetype: getattr(self, method_name)()\n\u001b[0m\u001b[0;32m     99\u001b[0m                 \u001b[1;32mfor\u001b[0m \u001b[0mmimetype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod_name\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mMIME_TYPES\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    100\u001b[0m                 if mimetype in include}\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\jupyter_integration.py\u001b[0m in \u001b[0;36m<dictcomp>\u001b[1;34m(.0)\u001b[0m\n\u001b[0;32m     96\u001b[0m         \u001b[0minclude\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0minclude\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0minclude\u001b[0m \u001b[1;32mis\u001b[0m \u001b[1;32mnot\u001b[0m \u001b[1;32mNone\u001b[0m \u001b[1;32melse\u001b[0m \u001b[1;33m{\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_jupyter_mimetype\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     97\u001b[0m         \u001b[0minclude\u001b[0m \u001b[1;33m-=\u001b[0m \u001b[0mset\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mexclude\u001b[0m \u001b[1;32mor\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 98\u001b[1;33m         return {mimetype: getattr(self, method_name)()\n\u001b[0m\u001b[0;32m     99\u001b[0m                 \u001b[1;32mfor\u001b[0m \u001b[0mmimetype\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mmethod_name\u001b[0m \u001b[1;32min\u001b[0m \u001b[0mMIME_TYPES\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mitems\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    100\u001b[0m                 if mimetype in include}\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\jupyter_integration.py\u001b[0m in \u001b[0;36m_repr_image_svg_xml\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    110\u001b[0m     \u001b[1;32mdef\u001b[0m \u001b[0m_repr_image_svg_xml\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m->\u001b[0m \u001b[0mstr\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    111\u001b[0m         \u001b[1;34m\"\"\"Return the rendered graph as SVG string.\"\"\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 112\u001b[1;33m         \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpipe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mformat\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'svg'\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mSVG_ENCODING\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\piping.py\u001b[0m in \u001b[0;36mpipe\u001b[1;34m(self, format, renderer, formatter, neato_no_op, quiet, engine, encoding)\u001b[0m\n\u001b[0;32m    102\u001b[0m             \u001b[1;34m'<?xml version='\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    103\u001b[0m         \"\"\"\n\u001b[1;32m--> 104\u001b[1;33m         return self._pipe_legacy(format,\n\u001b[0m\u001b[0;32m    105\u001b[0m                                  \u001b[0mrenderer\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    106\u001b[0m                                  \u001b[0mformatter\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mformatter\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\_tools.py\u001b[0m in \u001b[0;36mwrapper\u001b[1;34m(*args, **kwargs)\u001b[0m\n\u001b[0;32m    169\u001b[0m                               category=category)\n\u001b[0;32m    170\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 171\u001b[1;33m             \u001b[1;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    172\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    173\u001b[0m         \u001b[1;32mreturn\u001b[0m \u001b[0mwrapper\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\piping.py\u001b[0m in \u001b[0;36m_pipe_legacy\u001b[1;34m(self, format, renderer, formatter, neato_no_op, quiet, engine, encoding)\u001b[0m\n\u001b[0;32m    119\u001b[0m                      \u001b[0mengine\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mtyping\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mOptional\u001b[0m\u001b[1;33m[\u001b[0m\u001b[0mstr\u001b[0m\u001b[1;33m]\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    120\u001b[0m                      encoding: typing.Optional[str] = None) -> typing.Union[bytes, str]:\n\u001b[1;32m--> 121\u001b[1;33m         return self._pipe_future(format,\n\u001b[0m\u001b[0;32m    122\u001b[0m                                  \u001b[0mrenderer\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrenderer\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    123\u001b[0m                                  \u001b[0mformatter\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mformatter\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\piping.py\u001b[0m in \u001b[0;36m_pipe_future\u001b[1;34m(self, format, renderer, formatter, neato_no_op, quiet, engine, encoding)\u001b[0m\n\u001b[0;32m    147\u001b[0m             \u001b[1;32mif\u001b[0m \u001b[0mcodecs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlookup\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mis\u001b[0m \u001b[0mcodecs\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlookup\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    148\u001b[0m                 \u001b[1;31m# common case: both stdin and stdout need the same encoding\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 149\u001b[1;33m                 \u001b[1;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_pipe_lines_string\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    150\u001b[0m             \u001b[1;32mtry\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    151\u001b[0m                 \u001b[0mraw\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_pipe_lines\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0minput_encoding\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mencoding\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\backend\\piping.py\u001b[0m in \u001b[0;36mpipe_lines_string\u001b[1;34m(engine, format, input_lines, encoding, renderer, formatter, neato_no_op, quiet)\u001b[0m\n\u001b[0;32m    210\u001b[0m     \u001b[0mkwargs\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;34m'input_lines'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0minput_lines\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'encoding'\u001b[0m\u001b[1;33m:\u001b[0m \u001b[0mencoding\u001b[0m\u001b[1;33m}\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m    211\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 212\u001b[1;33m     \u001b[0mproc\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mexecute\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mrun_check\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcapture_output\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mquiet\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mquiet\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m    213\u001b[0m     \u001b[1;32mreturn\u001b[0m \u001b[0mproc\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mstdout\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\graphviz\\backend\\execute.py\u001b[0m in \u001b[0;36mrun_check\u001b[1;34m(cmd, input_lines, encoding, quiet, **kwargs)\u001b[0m\n\u001b[0;32m     82\u001b[0m     \u001b[1;32mexcept\u001b[0m \u001b[0mOSError\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     83\u001b[0m         \u001b[1;32mif\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0merrno\u001b[0m \u001b[1;33m==\u001b[0m \u001b[0merrno\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mENOENT\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 84\u001b[1;33m             \u001b[1;32mraise\u001b[0m \u001b[0mExecutableNotFound\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mcmd\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mfrom\u001b[0m \u001b[0me\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     85\u001b[0m         \u001b[1;32mraise\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     86\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mExecutableNotFound\u001b[0m: failed to execute WindowsPath('dot'), make sure the Graphviz executables are on your systems' PATH"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<graphviz.graphs.Digraph at 0x26d70625940>"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import graphviz\n",
    "dot=graphviz.Digraph(comment='the round table',name=\"顺序结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','Start')\n",
    "dot.node('2','input Radius =?',shape='parallelogram')\n",
    "dot.node('3','Print Radius')\n",
    "dot.node('4','Caculating Area')\n",
    "dot.node('5','Caculating perimeter')\n",
    "dot.node('6','print')\n",
    "dot.node('7','end')\n",
    "dot.edges(['12','23','34','45','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ridus= 5\n",
      "面积和周长: 78.53750000000001 31.415000000000003\n"
     ]
    }
   ],
   "source": [
    "''' \n",
    "计算圆周长\n",
    "'''\n",
    "Radius = eval(input(\"请输入圆半径:\"))\n",
    "print(\"Ridus=\",Radius)\n",
    "Area = 3.1415*Radius*Radius\n",
    "perimeter  = 2*3.1415*Radius \n",
    "print(\"面积和周长:\",Area,perimeter)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section4></a>\n",
    "## 2.5分支结构\n",
    "### 2.5.1 Python比较运算符\n",
    "\n",
    "以下假设变量a为10，变量b为20：\n",
    "<table><tr>\n",
    "<th width=\"10%\">运算符</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>==</td><td> 等于 - 比较对象是否相等</td><td> (a == b) 返回 False。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>!=</td><td> 不等于 - 比较两个对象是否不相等</td><td> (a != b) 返回 True。 </td>\n",
    "</tr>\n",
    "\n",
    "<tr>\n",
    "<td>&gt;</td><td> 大于 - 返回x是否大于y</td><td> (a &gt; b) 返回 False。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;</td><td> 小于 - 返回x是否小于y。所有比较运算符返回1表示真，返回0表示假。这分别与特殊的变量True和False等价。注意，这些变量名的大写。</td><td> (a &lt; b) 返回 True。 </td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&gt;=</td><td> 大于等于 - 返回x是否大于等于y。</td><td> (a &gt;= b) 返回 False。</td>\n",
    "\n",
    "</tr>\n",
    "<tr>\n",
    "<td>&lt;=</td><td> 小于等于 - 返回x是否小于等于y。</td><td> (a &lt;= b) 返回 True。 </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "### 2.5.2 Python逻辑运算符        \n",
    "Python语言支持逻辑运算符，以下假设变量 a 为 10, b为 20:\n",
    "<table><tr>\n",
    "<th>运算符</th><th>逻辑表达式</th><th>描述</th><th>实例</th>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>and</td><td>x and y</td><td> 布尔\"与\" - 如果 x 为 False，x and y 返回 x 的值，否则返回 y 的计算值。  </td><td> (a and b) 返回 20。</td>\n",
    "</tr>\n",
    "<tr>\n",
    "<td>or</td><td>x or y</td><td>布尔\"或\" - 如果 x 是 True，它返回 x 的值，否则它返回 y 的计算值。</td><td> (a or b) 返回 10。</td>\n",
    "</tr>\n",
    "<tr><td>not</td><td>not x</td><td>布尔\"非\" - 如果 x 为 True，返回 False 。如果 x 为 False，它返回 True。</td><td> not(a and b) 返回 False </td>\n",
    "</tr>\n",
    "</table>\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.5.3 条件控制语句\n",
    "Python 条件语句是通过一条或多条语句的执行结果（True 或者 False）来决定执行的代码块。\n",
    "\n",
    "可以通过下图来简单了解条件语句的执行过程:\n",
    "\n",
    "<img src=\".//img//if-condition.jpg\" width=\"250\"></img>\n",
    "\n",
    "<img src=\".//img//python-if.webp\" width=\"150\"></img>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 求绝对值。\n",
    "\n",
    "输入：x\n",
    "$$\n",
    "\\begin{align}\n",
    "&&\\left|y\\right |= \\left\\{\\begin{matrix}\n",
    "x & if \\: x\\geq 0\\\\-x& if \\:x< 0\n",
    "\\end{matrix}\\right.{\\color{Red} }\n",
    "\\end{align}\n",
    "$$\n",
    "输出：y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'graphviz' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[1;32mc:\\VSWork\\Pythonwork\\0001\\第二_课程序设计基础.ipynb Cell 19\u001b[0m in \u001b[0;36m<cell line: 1>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=0'>1</a>\u001b[0m dot\u001b[39m=\u001b[39mgraphviz\u001b[39m.\u001b[39mDigraph(comment\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mthe round table\u001b[39m\u001b[39m'\u001b[39m,name\u001b[39m=\u001b[39m\u001b[39m\"\u001b[39m\u001b[39m分支结构\u001b[39m\u001b[39m\"\u001b[39m,node_attr\u001b[39m=\u001b[39m{\u001b[39m'\u001b[39m\u001b[39mshape\u001b[39m\u001b[39m'\u001b[39m: \u001b[39m'\u001b[39m\u001b[39mbox\u001b[39m\u001b[39m'\u001b[39m})\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=1'>2</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m1\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m开始\u001b[39m\u001b[39m'\u001b[39m)\n\u001b[0;32m      <a href='vscode-notebook-cell:/c%3A/VSWork/Pythonwork/0001/%E7%AC%AC%E4%BA%8C_%E8%AF%BE%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E5%9F%BA%E7%A1%80.ipynb#X24sZmlsZQ%3D%3D?line=2'>3</a>\u001b[0m dot\u001b[39m.\u001b[39mnode(\u001b[39m'\u001b[39m\u001b[39m2\u001b[39m\u001b[39m'\u001b[39m,\u001b[39m'\u001b[39m\u001b[39m输入Real Number =?\u001b[39m\u001b[39m'\u001b[39m,shape\u001b[39m=\u001b[39m\u001b[39m'\u001b[39m\u001b[39mparallelogram\u001b[39m\u001b[39m'\u001b[39m)\n",
      "\u001b[1;31mNameError\u001b[0m: name 'graphviz' is not defined"
     ]
    }
   ],
   "source": [
    "dot=graphviz.Digraph(comment='the round table',name=\"分支结构\",node_attr={'shape': 'box'})\n",
    "dot.node('1','开始')\n",
    "dot.node('2','输入Real Number =?',shape='parallelogram')\n",
    "dot.node('3','判断RealNumber是否大于0？',shape='diamond')\n",
    "dot.node('4','RealNumber=RealNumber')\n",
    "dot.node('5','RealNumber=-RealNumber')\n",
    "dot.node('6','输出绝对值',shape='parallelogram')\n",
    "dot.node('7','结束')\n",
    "dot.edges(['12','23','34','35','46','56','67'])\n",
    "dot"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Real Number 3\n",
      "绝对值: 3\n"
     ]
    }
   ],
   "source": [
    "'''\n",
    "求绝对值。\n",
    "'''\n",
    "RealNumber = eval(input(\"输入实数:\"))\n",
    "\n",
    "if (RealNumber < 0):\n",
    "    RealNumber = -RealNumber\n",
    "print(\"绝对值:\",RealNumber)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<a id=section6></a>\n",
    "## 2.6循环结构\n",
    "\n",
    "循环结构：\n",
    "\n",
    "while语句\n",
    "\n",
    "for语句\n",
    "\n",
    "循环分类：  \n",
    "当型循环  \n",
    "直到型循环  \n",
    "\n",
    "\n",
    "\n",
    "\n",
    "[返回](#backup)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "char1 =\"a\"\n",
    "char2=\"b\"\n",
    "char3=\"c\"\n",
    "char=char1+char2+char3\n",
    "boor1=(char[2]==char3)\n",
    "print(boor1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 整数累加：  \n",
    "输入：正整数R    \n",
    "处理：  \n",
    "S=1+2+3+…+R  \n",
    "<img src=\"./img/int_add.png\" width=\"150\">  \n",
    "输出：输出S"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "累加求和 36\n"
     ]
    }
   ],
   "source": [
    "R = eval(input(\"请输入正整数:\"))\n",
    "i, S = 0, 0\n",
    "while (i<=R):\n",
    "    S = S + i\n",
    "    i = i + 1\n",
    "print(\"累加求和\",S)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Python 提供了 for 循环和 while 循环（在 Python 中没有 do..while 循环）:\n",
    "\n",
    "<table><tr><th style=\"width:30%\">循环类型</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-while-loop.html\" title=\"Python WHILE 循环\">while 循环</a></td><td>在给定的判断条件为 true 时执行循环体，否则退出循环体。</td></tr>\n",
    "<tr><td><a href=\"/python/python-for-loop.html\" title=\" Python FOR 循环\">for 循环</a></td><td>重复执行语句</td></tr>\n",
    "<tr><td><a href=\"/python/python-nested-loops.html\" title=\"Python 循环全套\">嵌套循环</a></td><td>你可以在while循环体中嵌套for循环</td></tr>\n",
    "</table>\n",
    "\n",
    "### 循环控制语句\n",
    "循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句：\n",
    "<table><tr><th style=\"width:30%\">控制语句</th><th>描述</th></tr>\n",
    "<tr><td><a href=\"/python/python-break-statement.html\" title=\"Python break 语句\">break 语句</a></td><td>在语句块执行过程中终止循环，并且跳出整个循环</td></tr>\n",
    "<tr><td><a href=\"/python/python-continue-statement.html\" title=\"Python  语句\">continue 语句</a></td><td>在语句块执行过程中终止当前循环，跳出该次循环，执行下一次循环。</td></tr>\n",
    "<tr><td><a href=\"/python/python-pass-statement.html\" title=\"Python pass 语句\">pass 语句</a></td><td>pass是空语句，是为了保持程序结构的完整性。</td></tr>\n",
    "</table>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 例题 绘制数字图画\n",
    "   <img src=\".//img//jqm1.jpg\" width=\"150 \" alt=\"机器猫\">"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "FileNotFoundError",
     "evalue": "[Errno 2] No such file or directory: '..\\\\jqm1.jpg'",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
      "\u001b[1;32m<ipython-input-1-41990e0f104b>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m\u001b[0m\n\u001b[0;32m      9\u001b[0m \u001b[0mchar_len\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mascii_char\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     10\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 11\u001b[1;33m \u001b[0mpic\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;34m\"..\\\\jqm1.jpg\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m     12\u001b[0m \u001b[1;31m#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m     13\u001b[0m \u001b[1;31m#matplotlib 中色彩排列是R G B\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\pyplot.py\u001b[0m in \u001b[0;36mimread\u001b[1;34m(fname, format)\u001b[0m\n\u001b[0;32m   2059\u001b[0m \u001b[1;33m@\u001b[0m\u001b[0mdocstring\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcopy\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimread\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2060\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mimread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mNone\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2061\u001b[1;33m     \u001b[1;32mreturn\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mimread\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mformat\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2062\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2063\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\matplotlib\\image.py\u001b[0m in \u001b[0;36mimread\u001b[1;34m(fname, format)\u001b[0m\n\u001b[0;32m   1462\u001b[0m             raise ValueError('Only know how to handle PNG; with Pillow '\n\u001b[0;32m   1463\u001b[0m                              'installed, Matplotlib can handle more images')\n\u001b[1;32m-> 1464\u001b[1;33m         \u001b[1;32mwith\u001b[0m \u001b[0mImage\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;32mas\u001b[0m \u001b[0mimage\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   1465\u001b[0m             \u001b[1;32mreturn\u001b[0m \u001b[0mpil_to_array\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mimage\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   1466\u001b[0m     \u001b[1;32mfrom\u001b[0m \u001b[0mmatplotlib\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0m_png\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;32mc:\\ProgramData\\Anaconda3\\lib\\site-packages\\PIL\\Image.py\u001b[0m in \u001b[0;36mopen\u001b[1;34m(fp, mode)\u001b[0m\n\u001b[0;32m   2876\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2877\u001b[0m     \u001b[1;32mif\u001b[0m \u001b[0mfilename\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 2878\u001b[1;33m         \u001b[0mfp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mbuiltins\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mopen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mfilename\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m\"rb\"\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m   2879\u001b[0m         \u001b[0mexclusive_fp\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m   2880\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n",
      "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: '..\\\\jqm1.jpg'"
     ]
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "show_heigth = 50\n",
    "show_width = 110\n",
    "#这两个数字是调出来的\n",
    "\n",
    "ascii_char = list(\n",
    "    \"$@B%8&WM#*oahkbdpqwmZO0QLCJUYXzcvunxrjft/\\|()1{}[]?-_+~<>i!lI;:,\\\"^`'. \")\n",
    "#生成一个ascii字符列表\n",
    "char_len = len(ascii_char)\n",
    "\n",
    "pic = plt.imread(\"..\\\\jqm1.jpg\")\n",
    "#使用plt.imread方法来读取图像，对于彩图，返回size = heigth*width*3的图像\n",
    "#matplotlib 中色彩排列是R G B\n",
    "#opencv的cv2中色彩排列是B G R\n",
    "\n",
    "pic_heigth, pic_width, _ = pic.shape\n",
    "#获取图像的高、宽\n",
    "\n",
    "gray = 0.2126 * pic[:, :, 0] + 0.7152 * pic[:, :, 1] + 0.0722 * pic[:, :, 2]\n",
    "#RGB转灰度图的公式 gray = 0.2126 * r + 0.7152 * g + 0.0722 * b\n",
    "\n",
    "#思路就是根据灰度值，映射到相应的ascii_char\n",
    "for i in range(show_heigth):\n",
    "    #根据比例映射到对应的像素\n",
    "    y = int(i * pic_heigth / show_heigth)\n",
    "    text = \"\"\n",
    "    for j in range(show_width):\n",
    "        x = int(j * pic_width / show_width)\n",
    "        text += ascii_char[int(gray[y][x] / 256 * char_len)]\n",
    "    print(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# ! pip install -i http源\n",
    "新版ubuntu要求使用https源，要注意。\n",
    "\n",
    "清华：https://pypi.tuna.tsinghua.edu.cn/simple\n",
    "\n",
    "阿里云：https://mirrors.aliyun.com/pypi/simple/\n",
    "\n",
    "中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/\n",
    "\n",
    "华中理工大学：https://pypi.hustunique.com/\n",
    "\n",
    "山东理工大学：https://pypi.sdutlinux.org/ \n",
    "\n",
    "豆瓣：https://pypi.douban.com/simple/\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3.8.3 ('base')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.3"
  },
  "orig_nbformat": 4,
  "vscode": {
   "interpreter": {
    "hash": "ad2bdc8ecc057115af97d19610ffacc2b4e99fae6737bb82f5d7fb13d2f2c186"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
